/**
 * @version 1.0.0
 * @Title: Synthesizer
 * @Package: lx.music.sound.midi
 * @Description: Copyright: Copyright (c) 2016
 * @Company: 成都壹柒互动科技有限公司
 * @author huangzhilong.hzl
 * @date 2017-10-25 18:58
 */
package lx.music.sound.midi;

/**
 * @version 1.0.0
 * @Title: Synthesizer
 * @Package: lx.music.sound.midi
 * @Description: Copyright: Copyright (c) 2016
 * @Company: 成都壹柒互动科技有限公司
 * @author huangzhilong.hzl
 * @date 2017-10-25 18:58
 */
public interface Synthesizer extends MidiDevice{

    public int getMaxPolyphony() ;

    public long getLatency() ;

    public MidiChannel[] getChannels() ;

    public VoiceStatus[] getVoiceStatus() ;

    public boolean isSoundbankSupported(Soundbank soundbank) ;

    public boolean loadInstrument(Instrument instrument) ;

    public void unloadInstrument(Instrument instrument) ;

    public boolean remapInstrument(Instrument from ,Instrument to) ;

    public Soundbank getDefaultSoundbank() ;

    public Instrument[] getAvailableInstruments() ;

    public Instrument[] getLoadedInstruments() ;

    public boolean loadAllInstruments(Soundbank soundbank) ;

    public void unloadAllInstruments(Soundbank soundbank) ;

    public boolean loadInstruments(Soundbank soundbank, Patch[] patchList) ;

    public void unloadInstruments(Soundbank soundbank, Patch[] patchList) ;

}
